//
//  ZXLNetWorkRequestManager.m
//  EPA
//
//  Created by 朱兴隆 on 16/4/15.
//  Copyright © 2016年 朱兴隆. All rights reserved.
//

#import "ZXLNetWorkRequestManager.h"

@interface ZXLNetWorkRequestManager ()
// 存储回调block的属性
@property (nonatomic, copy) ResultBlock block;
@end
@implementation ZXLNetWorkRequestManager
// 单例方法
+ (instancetype)defaultManager {
    static ZXLNetWorkRequestManager *manager = nil;
    @synchronized(self) {
        if (!manager) {
            manager = [[ZXLNetWorkRequestManager alloc] init];
        }
    }
    return manager;
}

// 请求方法
+ (void)requestURL:(NSURL *)url Method:(URLRequestMethod)method Params:(NSDictionary *)params Result:(ResultBlock)resultBlock {
    // 空的可变字符串
    NSMutableString *urlString = [NSMutableString new];
    if ([url isKindOfClass:[NSURL class]]) {
        // 拼接url
        [urlString appendString:url.absoluteString];
        
    }else if ([url isKindOfClass:[NSString class]]) {
        [urlString appendString:(NSString *)url];
    }
    if (urlString.length == 0) {
        NSError *error = [NSError errorWithDomain:@"EPA" code:251 userInfo:@{@"reason":@"你输入的网址不正确"}];
        resultBlock(nil,nil,error);
        return;
    }
    // 把参数字典转为字符串
    ZXLNetWorkRequestManager *manager = [ZXLNetWorkRequestManager new];
    manager.block = resultBlock;
    
    
    NSString *paraStr = [manager strFromDict:params];
    
    switch (method) {
        case ZXL_GET:
        {
            if (paraStr.length > 0) {
                [urlString appendFormat:@"?%@",paraStr];
            }
//            [urlString appendString:paraStr];
            // get请求
            [manager requestURL:[NSURL URLWithString:urlString] resultBlock:resultBlock];

        }
            break;
        case ZXL_POST:
            [manager postURL:urlString ParaStr:paraStr ResultBlock:resultBlock];
            
            break;
        default:
            break;
    }
    
}
// Get网络请求
- (void)requestURL:(NSURL *)url resultBlock:(ResultBlock)block {

    NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:block];
    
    // 开始网络请求
    [dataTask resume];
}
// POST网络请求
- (void)postURL:(NSString *)urlStr ParaStr:(NSString *)paraStr ResultBlock:(ResultBlock)block {
    // 创建NSURL
    NSURL *url = [NSURL URLWithString:urlStr];
    // 创建可变请求
    NSMutableURLRequest *mRequest = [NSMutableURLRequest requestWithURL:url];
    // 设置POST请求方式
    [mRequest setHTTPMethod:@"POST"];
    // 设置请求体
    [mRequest setHTTPBody:[paraStr dataUsingEncoding:NSUTF8StringEncoding]];
    
    NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:mRequest completionHandler:block];
    [dataTask resume];
}

- (NSString *)strFromDict:(NSDictionary *)dict {
    // 空字符串
//    NSMutableString *paraStr = [NSMutableString stringWithFormat:@"?"];
    // 空数组
    NSMutableArray *array = [NSMutableArray new];
    for (NSString *key in dict) {
        NSString *str = [NSString stringWithFormat:@"%@=%@",key,dict[key]];
        [array addObject:str];
    }
    // 数组拼接字符串
    NSString *para = [array componentsJoinedByString:@"&"];
    NSLog(@"%@",para);
    // 返回
    return para;
}

@end
